package com.leetcode;

import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;

public class P0349IntersectionOfTwoArrays {

	
	public P0349IntersectionOfTwoArrays() {
		
	}
	
	
	public static void main(String[] args) {
		
		int[] nums1 = {1,1,2};
		int[] nums2 = {2,3};
		intersection(nums1, nums2);
		
		System.exit(0);
	}
	
	public static int[] intersection(int[] nums1, int[] nums2) {
		Map<Integer, Integer> map = new HashMap<Integer, Integer>();

		Map<Integer, Integer> tempMap = new HashMap<Integer, Integer>();
		
		//去重
		int[] netNums1 = {}; 
		for(int item : nums1) {
			if(tempMap.get(item) == null) {
				netNums1 = insertArr(netNums1, item);
				tempMap.put(item, 1);
			}
		}
		
		tempMap.clear();
		int[] netNums2 = {}; 
		for(int item : nums2) {
			if(tempMap.get(item) == null) {
				netNums2 = insertArr(netNums2, item);
				tempMap.put(item, 1);
			}
		}
		
		
		//求交集
		for(int item : netNums1) {
			if(map.get(item) == null) {
				map.put(item, 1);
			} else {
				int temp = map.get(item);
				map.remove(item);
				map.put(item, temp + 1);
			}
		}
		
		for(int item : netNums2) {
			if(map.get(item) == null) {
				map.put(item, 1);
			} else {
				int temp = map.get(item);
				map.remove(item);
				map.put(item, temp + 1);
			}
		}
		
		
		int[] result = {};
		for(Map.Entry<Integer, Integer> entry : map.entrySet()) {
			if(map.get(entry.getKey()) > 1) {
				result = insertArr(result, entry.getKey());
			}
		}
		
		
		
		return result;
        
    }
	
	public static int[] insertArr(int[] arr, int tar) {
		arr = Arrays.copyOf(arr, arr.length + 1);
		arr[arr.length - 1] = tar;
		
		return arr;
		
	}

}
